オープンソースのデータ・ディスカバリーおよびメタデータ・エンジン『Amundsen』のアーキテクチャを読み解く
下記エントリでは、公式サイトから得られる各種リソース情報などを紹介しました。
当エントリでは、Amundsenのアーキテクチャ、及びAmundsenを構成する機能群に関する詳細についてどのようなものがあるのかをそれぞれ見ていきたいと思います。
目次
アーキテクチャ全体図
Amundsenの公式ドキュメントに掲載されているアーキテクチャ全体構成図は以下。
フロントエンドサービス(Frontend Service)
フロントエンドサービス(Frontend Service)は、ユーザーのインタラクションのためのWeb UIポータルとして機能。
React with Redux, Bootstrap, Webpack, Babelでプレゼンテーション層を構築したFlaskベースのWebアプリとなっています。
- React Redux | React Redux
- Bootstrap · The most popular HTML, CSS, and JS library in the world.
- webpack
- Babel · The compiler for next generation JavaScript
フロントエンドサービスでは、ユーザーがデータリソースを検索するための別個の検索サービス(Search Service)と、与えられたリソースのメタデータを表示・編集するための別個のメタデータサービス(Metadata Service)を利用しています。
検索サービス(Search Service)
検索サービス(Search Service)プロキシはElasticSearchの検索機能(もしくは選択内容によってはApache Atlas の検索 API)を使用し、フロントエンドサービスからの検索リクエストに対応するためのRESTful APIを提供します。
このAPIはOpenAPI(Swagger)を介して検索可能です。現時点ではテーブルリソースのみがインデックス化され、検索可能です。検索インデックスは、後述するデータビルダ(Databuilder)の elasticsearch パブリッシャーで構築されています。
- API Documentation & Design Tools for Teams | Swagger
- amundsendatabuilder/elasticsearch_publisher.py at master · amundsen-io/amundsendatabuilder
API documentation
OpenAPI 3.0.2でSwaggerのドキュメントを設定。このドキュメントはFlasgger経由で生成されています。
APIを追加したり更新したりする場合はドキュメント更新が必要。ドキュメントは、ローカルでアプリケーションを実行し、http://localhost:5001/apidocs/
にアクセス可能です。(※現在のところ、ドキュメントはローカル設定でのみ動作)
メタデータサービス(Metadata Service)
メタデータサービス(Metadata Service)は現在Neo4jプロキシを使用してNeo4jグラフDBと対話し、フロントエンドサービスのメタデータを提供しています。メタデータはグラフモデルとして表現されます。
以下の図はAmundsenでメタデータがどのようにモデル化されているかを示しています。
AmundsenのメタデータサービスはRestful APIを提供し、テーブルやカラムの説明、タグなどのメタデータの提供と更新を担当します。メタデータサービスはNeo4jやApache Atlasを永続的なレイヤーとして使用することができます。
- Neo4j Graph Platform – The Leader in Graph Databases
- Apache Atlas – Data Governance and Metadata framework for Hadoop
データビルダー(Databuilder)
データビルダー(Databuilder)は、Apache Gobblinにインスパイアされたデータインジェスト・ライブラリです。メタデータを構築するためのデータインジェストライブラリを提供しています。
オーケストレーションフレームワーク(Apache Airflowなど)で使用して、アムンゼンからデータを構築することができます。このライブラリは、アドホックなPythonスクリプトやApache Airflow DAGの中で使うことができます。ちなみに開発元となるLyftでは、Airflow DAGを使って1日1回メタデータを構築しています。
まとめ
という訳で、Amundsenのアーキテクチャ及び各機能群のちょっと踏み込んだ紹介でした。
各機能群についてはそれぞれセットアップ方法やチュートリアル的なもの、サンプルコード等も用意されていたので、気になるところを適宜触っていこうと思います。